iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 13
0
Modern Web

從零開始認識 Node.js系列 第 13

[Day 13] API 尋寶記 - 推拉高手 Events

  • 分享至 

  • xImage
  •  

Three

前言

[Day 3] Node.js 與我 中的一開始就提到 Node.js 是事件驅動,在 Google 查「 Node event」可以發現已經有很多位前輩寫過 Event 的介紹,如:

今天就來說說 Events API 。

來吧! Event

官方對 Event API 的介紹是「Node.js 大多數是建 築在異步事件驅動,其中有些是會週期性發出 Emit named event ( 稱 Emitters ) ,然而調整 Function 」。來看看怎麼使用用吧!

Example code

// 載入 Event Module
const EventEmitter = require('events');

// MyEmitter 繼承 Event
class MyEmitter extends EventEmitter {}

// 建立一個 Event
const myEmitter = new MyEmitter();

// 在線聆聽、等待,當 emit 發出的事件與預計收接的事件名稱相同,就做裡面的動作
// ( event.on( eventName, ([...args]) => {} ) )
myEmitter.on('event', () => {
  console.log('an event occurred!');
});

// 發出 event ( event.emit( eventName[, ...args]) )
myEmitter.emit('event');

前言 有分享前輩們寫得相關文,裡面滿多都提到用來代替 Callback function ,但我建議 適度 ,不要使用過多。將 Event 的 emit 視為電臺廣播, on 是收音機,兩者都可以不屬於唯一,因此使用 Event 我認為要注意以下幾點:

  1. 不宜使用太多
    • 有部分資源需要放在 on 上,隨時準備好接收對應的 emit
  2. Event Name 需要管理
    • 使用情境不一定像 Example code 集中在同個檔案中,因此容易忘記是否有重複的 Event Name ;當 emit 發生重複時, on 就會重複執行;當是 on 重複時則所有重複 event name 的 on 都被執行

若有需要動態加入 on 有 emitter.addListener 可以使用;要刪除 on 有 emitter.removeListener 和全刪除的 emitter.removeAllListeners

看似很方便、容易使用的 Event ,實際上複雜在管理 Event Name;在過往團隊開發的經驗中,仍以 Callback 、 Promise 為主,過程中極少會用到 Event 的方式處理。


上一篇
[Day 12] API 尋寶記 - 值得了解的 C / C++ Addons
下一篇
[Day 14] API 尋寶記 - File System
系列文
從零開始認識 Node.js31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言